Python 单分派

在 Python 中(3.4+ ),也可以实现简单的泛型函数。

在 Python 中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式,官方名称 是 single-dispatch。你或许听不懂,说简单点,就是可以实现第一个参数的数据类型不同,其调用的函数也就不同。

singledispatch 是 PEP443 中引入的 文档地址, 它使用方法极其简单,只要被 singledispatch 装饰的函数,就是一个单分派的 single-dispatch 的泛函数 generic functions

单分派:根据一个参数的类型,以不同方式执行相同的操作的行为。
多分派:可根据多个参数的类型选择专门的函数的行为。
泛函数:多个函数绑在一起组合成一个泛函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from functools import singledispatch

@singledispatch
def type_func(param):
print(f"参数: {param} 不正确,请输入合法参数!")

@type_func.register(int)
def _(param):
print(f"int: {param}")

@type_func.register(str)
def _(param):
print(f"str: {param}")

@type_func.register(float)
def _(param):
print(f"float: {param}")

if __name__ == "__main__":
type_func(20)
type_func("20")
type_func(20.0)
type_func([1, 2, 3])
1
2
3
4
int: 20
str: 20
float: 20.0
参数: [1, 2, 3] 不正确,请输入合法参数!

在实际生活中,可能对不同类型的参数处理有点帮助,从而不用去写 if isinstance(obj, list) 之类的判断。